package com.ruiysoft.controller.order.vo;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * OrderListCusVo
 */
@Validated
@javax.annotation.Generated(value = "io.swagger.codegen.languages.SpringCodegen", date = "2018-10-27T20:58:54.914+08:00")

public class OrderListCusVo   {
  @JsonProperty("id")
  private Long id = null;

  @JsonProperty("orderNo")
  private String orderNo = null;

  @JsonProperty("logisticsNo")
  @Valid
  private List<String> logisticsNo = null;

  @JsonProperty("logisticsEnterpriseName")
  String logisticsEnterpriseName;

  @JsonProperty("logisticsEnterpriseCode")
  String logisticsEnterpriseCode;

  @JsonProperty("logisticsCreateTime")
  String logisticsCreateTime;

  @JsonProperty("createTime")
  private String createTime = null;
  /**
   * 总金额
   */
  @JsonProperty("totalAmount")
  private BigDecimal totalAmount;

  /**
   * 虚拟币总额
   */
  @JsonProperty("receivableVirtualCoin")
  private Long receivableVirtualCoin;

  /**
   * 实际收到的虚拟币总额
   */
  @JsonProperty("collectedVirtualCoin")
  private Long collectedVirtualCoin;

  /**
   * 商品参考价值总额：用于计算运费
   */
  @JsonProperty("mdseTotalAmount")
  private BigDecimal mdseTotalAmount;

  /**
   * 商品应收现金总额
   */
  @JsonProperty("mdseReceivableAmount")
  private BigDecimal mdseReceivableAmount;

  /**
   * 应收现金金额
   */
  @JsonProperty("receivableAmount")
  private BigDecimal receivableAmount = null;

  /**
   * 实际收到的金额
   */
  @JsonProperty("collectedAmount")
  private BigDecimal collectedAmount = null;

  @JsonProperty("status")
  private Integer status = null;

  @JsonProperty("receiverInfoVo")
  private OrderReceiverInfoVo receiverInfoVo;

  /**
   * 运费
   */
  @JsonProperty("freight")
  private BigDecimal freight = null;

  @JsonProperty("skuInfoList")
  @Valid
  private List<OrderSkuListCusVo> skuInfoList = null;

  Long orderLogisticsId;

  public OrderListCusVo id(Long id) {
    this.id = id;
    return this;
  }

  /**
   * Get id
   * @return id
  **/
  @ApiModelProperty(example = "111111", value = "")


  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public OrderListCusVo orderNo(String orderNo) {
    this.orderNo = orderNo;
    return this;
  }

  /**
   * 订单编号
   * @return orderNo
  **/
  @ApiModelProperty(example = "2018102716340001", value = "订单编号")


  public String getOrderNo() {
    return orderNo;
  }

  public void setOrderNo(String orderNo) {
    this.orderNo = orderNo;
  }

  public OrderListCusVo logisticsNo(List<String> logisticsNo) {
    this.logisticsNo = logisticsNo;
    return this;
  }

  public OrderListCusVo addLogisticsNoItem(String logisticsNoItem) {
    if (this.logisticsNo == null) {
      this.logisticsNo = new ArrayList<String>();
    }
    this.logisticsNo.add(logisticsNoItem);
    return this;
  }

  public OrderListCusVo receiverInfoVo(OrderReceiverInfoVo receiverInfoVo) {
    this.receiverInfoVo = receiverInfoVo;
    return this;
  }

  public OrderReceiverInfoVo getReceiverInfoVo() {
    return receiverInfoVo;
  }

  public void setReceiverInfoVo(OrderReceiverInfoVo receiverInfoVo) {
    this.receiverInfoVo = receiverInfoVo;
  }

  /**
   * Get logisticsNo
   * @return logisticsNo
  **/
  @ApiModelProperty(value = "")


  public List<String> getLogisticsNo() {
    return logisticsNo;
  }

  public void setLogisticsNo(List<String> logisticsNo) {
    this.logisticsNo = logisticsNo;
  }

  public OrderListCusVo createTime(String createTime) {
    this.createTime = createTime;
    return this;
  }

  /**
   * 下单时间
   * @return createTime
  **/
  @ApiModelProperty(example = "2018-10-27 20:24", value = "下单时间")


  public String getCreateTime() {
    return createTime;
  }

  public void setCreateTime(String createTime) {
    this.createTime = createTime;
  }

  public OrderListCusVo collectedAmount(BigDecimal collectedAmount) {
    this.collectedAmount = collectedAmount;
    return this;
  }

  /**
   * 实收金额
   * @return collectedAmount
  **/
  @ApiModelProperty(example = "100.1", value = "实收金额")


  public BigDecimal getCollectedAmount() {
    return collectedAmount;
  }

  public void setCollectedAmount(BigDecimal collectedAmount) {
    this.collectedAmount = collectedAmount;
  }

  public OrderListCusVo receivableAmount(BigDecimal receivableAmount) {
    this.receivableAmount = receivableAmount;
    return this;
  }

  /**
   * 实收金额
   * @return collectedAmount
  **/
  @ApiModelProperty(example = "100.1", value = "应付金额")


  public BigDecimal getReceivableAmount() {
    return receivableAmount;
  }

  public void setReceivableAmount(BigDecimal receivableAmount) {
    this.receivableAmount = receivableAmount;
  }

  public OrderListCusVo status(Integer status) {
    this.status = status;
    return this;
  }

  /**
   * 订单状态1 订单生成 待用户确认 2 待用户付款 3 用户已付款 待平台确认 4 平台已确认 待商铺确认 5 商铺确认付款 待发货 6 已发货 待确认收货 7 已收货 11 申请换货 待商铺确认 12 商铺确认换货 21 申请退货 待商铺确认 22 商铺确认退货 待退款 23 已退款 97 订单取消 98 订单关闭 99 订单完结
   * @return status
  **/
  @ApiModelProperty(example = "2", value = "订单状态1 订单生成 待用户确认 2 待用户付款 3 用户已付款 待平台确认 4 平台已确认 待商铺确认 5 商铺确认付款 待发货 6 已发货 待确认收货 7 已收货 11 申请换货 待商铺确认 12 商铺确认换货 21 申请退货 待商铺确认 22 商铺确认退货 待退款 23 已退款 97 订单取消 98 订单关闭 99 订单完结")


  public Integer getStatus() {
    return status;
  }

  public void setStatus(Integer status) {
    this.status = status;
  }

  public OrderListCusVo skuInfoList(List<OrderSkuListCusVo> skuInfoList) {
    this.skuInfoList = skuInfoList;
    return this;
  }

  public OrderListCusVo addSkuInfoListItem(OrderSkuListCusVo skuInfoListItem) {
    if (this.skuInfoList == null) {
      this.skuInfoList = new ArrayList<OrderSkuListCusVo>();
    }
    this.skuInfoList.add(skuInfoListItem);
    return this;
  }


  public BigDecimal getTotalAmount() {
    return totalAmount;
  }

  public void setTotalAmount(BigDecimal totalAmount) {
    this.totalAmount = totalAmount;
  }

  public OrderListCusVo totalAmount(BigDecimal totalAmount) {
    setTotalAmount(totalAmount);
    return this;
  }

  public Long getReceivableVirtualCoin() {
    return receivableVirtualCoin;
  }

  public void setReceivableVirtualCoin(Long receivableVirtualCoin) {
    this.receivableVirtualCoin = receivableVirtualCoin;
  }

  public OrderListCusVo receivableVirtualCoin(Long receivableVirtualCoin) {
    setReceivableVirtualCoin(receivableVirtualCoin);
    return this;
  }

  public Long getCollectedVirtualCoin() {
    return collectedVirtualCoin;
  }

  public void setCollectedVirtualCoin(Long collectedVirtualCoin) {
    this.collectedVirtualCoin = collectedVirtualCoin;
  }

  public OrderListCusVo collectedVirtualCoin(Long collectedVirtualCoin) {
    setCollectedVirtualCoin(collectedVirtualCoin);
    return this;
  }

  public BigDecimal getMdseTotalAmount() {
    return mdseTotalAmount;
  }

  public void setMdseTotalAmount(BigDecimal mdseTotalAmount) {
    this.mdseTotalAmount = mdseTotalAmount;
  }
  public OrderListCusVo mdseTotalAmount(BigDecimal mdseTotalAmount) {
    setMdseTotalAmount(mdseTotalAmount);
    return this;
  }

  public BigDecimal getMdseReceivableAmount() {
    return mdseReceivableAmount;
  }

  public void setMdseReceivableAmount(BigDecimal mdseReceivableAmount) {
    this.mdseReceivableAmount = mdseReceivableAmount;
  }

  public OrderListCusVo mdseReceivableAmount(BigDecimal mdseReceivableAmount) {
    setMdseReceivableAmount(mdseReceivableAmount);
    return this;
  }

  public OrderListCusVo freight(BigDecimal freight) {
    this.freight = freight;
    return this;
  }

  /**
   * 运费
   *
   * @return freight
   **/
  @ApiModelProperty(value = "运费")
  public BigDecimal getFreight() {
    return freight;
  }

  public void setFreight(BigDecimal freight) {
    this.freight = freight;
  }

  /**
   * 商品信息
   * @return skuInfoList
  **/
  @ApiModelProperty(value = "商品信息")

  @Valid

  public List<OrderSkuListCusVo> getSkuInfoList() {
    return skuInfoList;
  }

  public void setSkuInfoList(List<OrderSkuListCusVo> skuInfoList) {
    this.skuInfoList = skuInfoList;
  }


  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    OrderListCusVo orderListCusVo = (OrderListCusVo) o;
    return Objects.equals(this.id, orderListCusVo.id) &&
        Objects.equals(this.orderNo, orderListCusVo.orderNo) &&
        Objects.equals(this.logisticsNo, orderListCusVo.logisticsNo) &&
        Objects.equals(this.createTime, orderListCusVo.createTime) &&
        Objects.equals(this.collectedAmount, orderListCusVo.collectedAmount) &&
        Objects.equals(this.status, orderListCusVo.status) &&
        Objects.equals(this.skuInfoList, orderListCusVo.skuInfoList);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, orderNo, logisticsNo, createTime, collectedAmount, status, skuInfoList);
  }

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class OrderListCusVo {\n");

    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    orderNo: ").append(toIndentedString(orderNo)).append("\n");
    sb.append("    logisticsNo: ").append(toIndentedString(logisticsNo)).append("\n");
    sb.append("    createTime: ").append(toIndentedString(createTime)).append("\n");
    sb.append("    collectedAmount: ").append(toIndentedString(collectedAmount)).append("\n");
    sb.append("    status: ").append(toIndentedString(status)).append("\n");
    sb.append("    skuInfoList: ").append(toIndentedString(skuInfoList)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

  public String getLogisticsEnterpriseName() {
    return logisticsEnterpriseName;
  }

  public void setLogisticsEnterpriseName(String logisticsEnterpriseName) {
    this.logisticsEnterpriseName = logisticsEnterpriseName;
  }

  public String getLogisticsEnterpriseCode() {
    return logisticsEnterpriseCode;
  }

  public void setLogisticsEnterpriseCode(String logisticsEnterpriseCode) {
    this.logisticsEnterpriseCode = logisticsEnterpriseCode;
  }

  public String getLogisticsCreateTime() {
    return logisticsCreateTime;
  }

  public void setLogisticsCreateTime(String logisticsCreateTime) {
    this.logisticsCreateTime = logisticsCreateTime;
  }

  public Long getOrderLogisticsId() {
    return orderLogisticsId;
  }

  public void setOrderLogisticsId(Long orderLogisticsId) {
    this.orderLogisticsId = orderLogisticsId;
  }
}

